import cv2
import datetime
import time

'''
图片转换成灰色（降低为一维的灰度，减低计算强度）
图片上画矩形
使用训练分类器查找人脸
'''

##################### 图像转换成灰色 ########################
# filePath = "../img/xingye-1.png"
# img = cv2.imread(filePath)
# # 转换为灰色：图片转换成灰色（降低为一维的灰度，减低计算强度）
# gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# # 显示图像
# cv2.imshow("Xingye Gray", gray)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

##################### 画矩形 ########################
# # 坐标
# x = y = 10
# # 矩形宽高
# w = 100
# # 定义绘制颜色
# color = (0, 0, 255)
# # 绘制矩形
# cv2.rectangle(img, (x, y), (x + w, y + w), color,1)
# cv2.imshow("Xingye Rectangle",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

##################### 利用分类器识别人脸 ########################

filePath = "../img/xingye-1.png"
# filePath = "../img/women.jpg"
img = cv2.imread(filePath)
# 转换为灰色：图片转换成灰色（降低为一维的灰度，减低计算强度）
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 分类器
classifier = cv2.CascadeClassifier(
    "G:\Python35\Lib\site-packages\opencv_python-3.4.1.dist-info\haarcascades\haarcascade_frontalface_default.xml"
)

color = (0, 255, 0)

# 识别人脸
faceRects = classifier.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=3,
    minSize=(32, 32)
)

# 大于0检测到人脸
if len(faceRects):
    for faceRect in faceRects:
        x, y, h, w = faceRect

        # 画出人脸
        cv2.rectangle(
            img,
            (x, y),
            (x + h, x + w),
            color,
            1
        )

        # 左眼
        cv2.circle(
            img,
            # 圆心
            (x + w // 3, y + h // 4 + 20),
            # 半径
            min(w // 8, h // 8),
            color
        )

        # 右眼
        cv2.circle(
            img,
            (x + 3 * w // 4 - 10, y + h // 4 + 30),
            min(w // 8, h // 8),
            color
        )

        # 嘴巴
        cv2.rectangle(
            img,
            (x + 3 * w // 8, y + 3 * h // 4 - 5),
            (x + 5 * w // 8, y + 6 * h // 7 - 5),
            color
        )

cv2.imshow("Xingye Face Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
